package entity

import (
	"encoding/json"
	"time"
)

// 菜单权限表 sys_menu

// SysMenu 菜单权限
type SysMenu struct {
	//MenuId     int64  `gorm:"type:bigint(20);primary_key;auto_increment;菜单ID;" json:"menuId"`
	MenuId     int64  `gorm:"type:bigint(20);primary_key;auto_increment;菜单ID;" json:"menuId"`
	MenuName   string `gorm:"type:varchar(50);comment:菜单名称;" json:"menuName"`
	ParentId   int64  `gorm:"type:bigint(20);comment:父菜单ID;" json:"parentId"`
	ParentName string `gorm:"-" json:"parentName"`

	OrderNum  int    `gorm:"type:int(11);comment:显示顺序;" json:"orderNum"`
	Path      string `gorm:"type:varchar(200);comment:请求地址;" json:"path"`
	Component string `gorm:"type:varchar(200);comment:组件路劲;" json:"component"`
	Query     string `gorm:"type:varchar(200);comment:组件路劲;" json:"query"`

	Target     string    `gorm:"type:varchar(20);comment:打开方式（menuItem页签 menuBlank新窗口）;" json:"target"`
	MenuType   string    `gorm:"type:char(1);comment:菜单类型（M目录 C菜单 F按钮）;" json:"menuType"`
	Visible    string    `gorm:"type:char(1);comment:菜单状态（0显示 1隐藏）;" json:"visible"`
	Status     string    `gorm:"type:char(1);comment:菜单状态（0显示 1隐藏）;" json:"status"`
	Perms      string    `gorm:"type:varchar(100);comment:权限标识;" json:"perms"`
	Icon       string    `gorm:"type:varchar(100);comment:菜单图标;" json:"icon"`
	UpdateBy   string    `gorm:"type:varchar(64);comment:更新者;" json:"updateBy"`
	UpdateTime time.Time `gorm:"type:datetime;comment:更新时间;" json:"updateTime" time_format:"2006-01-02 15:04:05"`
	Remark     string    `gorm:"type:varchar(500);comment:备注;" json:"remark"`
	CreateTime time.Time `gorm:"type:datetime;comment:创建时间;column:create_time;" json:"createTime" time_format:"2006-01-02 15:04:05"`
	CreateBy   string    `gorm:"type:varchar(32);comment:创建人;column:create_by;"  json:"createBy"`
	DelFlag    int       `gorm:"type:tinyint(1);default:0;comment:删除标记;column:del_flag;" json:"delFlag"`
	IsFrame    string    `gorm:"type:varchar(32);comment:创建人;column:is_frame;"  json:"isFrame"`
	IsCache    int       `gorm:"type:int(11);comment:是否缓存;" json:"is_cache"`
	AlwaysShow bool      `gorm:"" json:"alwaysShow"` //你一个路由下面的 children 声明的路由大于1个时，自动会变成嵌套的模式--如组件页面

	Meta     []*MetaVo `gorm:"-" json:"meta"`
	Children []SysMenu `gorm:"-" json:"children"` // 修改为切片类型
}

func (e *SysMenu) TableName() string {
	return "sys_menu"
}

// 日期格式化
func (t SysMenu) MarshalJSON() ([]byte, error) {
	type TmpJSON SysMenu

	var createTimeStr, updateTimeStr string
	if !time.Time(t.CreateTime).IsZero() {
		createTimeStr = t.CreateTime.String()
	}
	if !time.Time(t.UpdateTime).IsZero() {
		updateTimeStr = time.Time(t.UpdateTime).Format("2006-01-02 15:04:05")
	}

	return json.Marshal(&struct {
		TmpJSON
		CreateTime string `json:"createTime"`
		UpdateTime string `json:"updateTime"`
	}{
		TmpJSON:    (TmpJSON)(t),
		CreateTime: createTimeStr,
		UpdateTime: updateTimeStr,
	})
}
